package com.grantheath.erebus.model 
{
	import flash.display.DisplayObjectContainer;
	import com.grantheath.erebus.view.transitionHandelers.ErebusFlexScaleTransitionHandeler;
	import com.grantheath.erebus.view.layers.ErebusLayer;
	import com.grantheath.erebus.view.ErebusAppStageMediator;
	import com.grantheath.erebus.view.preloaders.ErebusPagePreloader;
	import com.grantheath.erebus.view.ErebusPageMediator;
	import com.grantheath.erebus.view.ErebusPagePreloaderMediator;
	import com.grantheath.erebus.view.ErebusURLMediator;
	import com.grantheath.erebus.model.enum.names.ErebusProxyNames;
	import com.grantheath.erebus.model.nodes.ErebusAssetNode;
	import com.grantheath.erebus.model.nodes.ErebusPageNode;
	import com.grantheath.erebus.model.loaders.ErebusPageLoader;
	import com.grantheath.erebus.model.interfaces.IErebusClassReferenceProxy;

	import org.puremvc.as3.patterns.proxy.Proxy;

	/**
	 * @author grantheath
	 */
	public class ErebusClassReferenceProxy extends Proxy implements IErebusClassReferenceProxy 
	{
		private var _appStage : DisplayObjectContainer;
		
		public function ErebusClassReferenceProxy(appStage : DisplayObjectContainer)
		{
			super(ErebusProxyNames.CLASS_REFERENCE_PROXY);
			_appStage = appStage;
		}

		//GETTERS AND SETTERS
		public function get URLMediatorClass() : Class
		{
			return ErebusURLMediator;
		}
		
		public function get pagePreloaderMediatorClass() : Class
		{
			return ErebusPagePreloaderMediator;
		}
		
		public function get pageMediatorClass() : Class
		{
			return ErebusPageMediator;
		}
		
		public function get preferencesProxyClass() : Class
		{
			return ErebusPreferencesProxy;
		}
		
		public function get appStageMediatorClass() : Class
		{
			return ErebusAppStageMediator;
		}
		
		public function get siteTreeProxyClass() : Class
		{
			return ErebusXMLSiteTreeProxy;
		}
		
		public function get layersProxyClass() : Class
		{
			return ErebusXMLLayersProxy;
		}
		
		public function get URLProxyClass() : Class
		{
			return ErebusURLProxy;
		}
		
		public function get pageLoaderProxyClass() : Class
		{
			return ErebusPageLoaderProxy;
		}
		
		public function get assetLoaderProxyClass() : Class
		{
			return ErebusAssetLoaderProxy;
		}
		
		public function get assetLoaderClassReferenceProxy() : Class
		{
			return ErebusAssetLoaderClassReferenceProxy;
		}
		
		public function get pagePreloaderClasses() : Array
		{
			return [ErebusPagePreloader];
		}

		public function get pageLoaderClasses() : Array
		{
			return [ErebusPageLoader];
		}

		public function get pageNodeClasses() : Array
		{
			return [ErebusPageNode];
		}

		public function get assetNodeClasses() : Array
		{
			return [ErebusAssetNode];
		}
		
		public function get layerClasses() : Array
		{
			return [ErebusLayer];
		}
		
		public function get tranisitionHandelerClasses() : Array
		{
			return [ErebusFlexScaleTransitionHandeler];
		}
		
		public function get appStage() : DisplayObjectContainer
		{
			return _appStage;
		}
	}
}
